#define _CRT_SECURE_NO_WARNINGS 1

#include "Stack.h"

#include<cstdlib>
#include<cstdbool>

//namespace A
//{
//	namespace B
//	{
//		int rand = 10;
//	}
//}
//
//void func(int a)
//{
//
//}
//
//void func(int a, int b = 10)
//{
//
//}
//
//int main()
//{
//	printf("%p\n", rand);
//	printf("%p\n", A::B::rand);
//	return 0;
//}


#define ADD(x,y) ((x)+(y))
#include <assert.h>
#include<iostream>
using namespace std;

//class Stack
//{
//public:
//	Stack(int size = 4)
//	{
//		if (size == 0)
//		{
//			_a = nullptr;
//			_top = _capacity = 0;
//		}
//		else
//		{
//			_a = (int*)malloc(sizeof(int) * size);
//			if (_a == nullptr)
//			{
//				perror("malloc");
//				exit(-1);
//			}
//			_capacity = size;
//			_top = 0;
//		}
//	}
//
//	int Top()
//	{
//		return _a[_top-1];
//	}
//
//	void Push(int x)
//	{
//		if (_top == _capacity)
//		{
//			size_t newcapacity = _capacity == 0 ? 4 : 2 * _capacity;
//			int* tmp = (int*)realloc(_a, newcapacity*sizeof(int));
//			if (tmp == nullptr)
//			{
//				perror("realloc");
//				exit(-1);
//			}
//			_a = tmp;
//			_capacity = newcapacity;
//		}
//		_a[_top++] = x;
//	}
//
//	void Pop()
//	{
//		assert(_top > 0);
//		_top--;
//	}
//
//	bool Empty()
//	{
//		return _top == 0;
//	}
//
//	~Stack()
//	{
//		free(_a);
//		_a = nullptr;
//		_top = _capacity = 0;
//	}
//
//private:
//	int* _a;
//	int _top;
//	int _capacity;
//};
//
//bool isValid(const char* tmp)
//{
//	Stack st;
//	while (*tmp)
//	{
//		if (*tmp == '{' || *tmp == '(' || *tmp == '[')
//		{
//			st.Push(*tmp);
//			tmp++;
//		}
//		else
//		{
//			if (st.Empty())
//				return false;
//			char c = st.Top();
//			st.Pop();
//			if ((*tmp == ']' && c != '[')
//				|| (*tmp == ')' && c != '(')
//				|| (*tmp == '}' && c != '{'))
//			{
//				return false;
//			}
//			tmp++;
//		}
//	}
//	return st.Empty();
//}

//int main()
//{
//	const char* tmp = "{([])}";
//	bool b = isValid(tmp);
//	cout << b << endl;
//}


//class Date
//{
//public:
//	Date(int year = 2025,int month = 6,int day = 6)
//	{
//		_year = year;
//		_month = month;
//		_day = day;
//	}
//
//	void Print()
//	{
//		cout << _year << "/" << _month << "/" << _day << endl;
//	}
//
//	bool operator<(const Date& d)
//	{
//		if (_year < d._year)
//			return true;
//		else if (_year == d._year && _month < d._month)
//		{
//			return true;
//		}
//		else if (_year == d._year && _month == d._month && _day < d._day)
//		{
//			return true;
//		}
//		else
//		{
//			return false;
//		}
//	}
//
//	bool operator==(const Date& d)
//	{
//		if (_year == d._year && _month == d._month && _day == d._day)
//			return true;
//		else
//			return false;
//	}
//
//	bool operator<=(const Date& d)
//	{
//		if ((*this < d) || (*this == d))
//			return true;
//		else
//			return false;
//	}
//
//	int GetMonthDay(int year, int month)
//	{
//		int arrayday[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 };
//		if (month == 2)
//		{
//			if ((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0))
//			{
//				arrayday[2] = 29;
//			}
//		}
//		return arrayday[month];
//	}
//
//	Date operator+(int day)
//	{
//		Date d(*this);
//		d._day += day;
//		while (d._day > GetMonthDay(d._year, d._month))
//		{
//			d._day -= GetMonthDay(d._year, d._month);
//			d._month++;
//			if (d._month > 12)
//			{
//				d._year++;
//				d._month = 1;
//			}
//		}
//		return d;
//	}
//
//	Date& operator+=(int day)
//	{
//		*this = *this + day;
//		return *this;
//	}
//
//private:
//	int _year;
//	int _month;
//	int _day;
//};

//int main()
//{
//	Date d1(2025, 6, 6);
//	Date d2(2023, 7, 21);
//	Date d3(d1);
//	cout << (d1 < d2) << endl;
//
//	Date ret = d1 + 365;
//	ret.Print();
//	d1.Print();
//
//	d2 += 365;
//	d2.Print();
//	return 0;
//}

#include "Date.h"

void test1()
{
	Date d1(2023, 7, 31);
	d1 += 100;
	d1.Print();

	Date d2;
	d2 = d1 + 1;
	d2.Print();

	d1 -= 1;
	d1.Print();
	Date d3;
	d3 = d1 - 100;
	d3.Print();
}

void test2()
{
	Date d1(2023, 7, 31);
	Date d2 = d1++;
	d2.Print();
	++d1;
	d1.Print();
}

void test3()
{
	Date d1(2025, 6, 23);
	Date d2(2023, 7, 31);
	int ret = d1 - d2;
	cout << ret << endl;
}

void test4()
{
	Date d1(2023, 7, 31);
	cout << d1;

}

int main()
{
	//test1();
	//test2();
	//test3();
	test4();
}